package com.shop.shoppingmall.service;

import com.alibaba.fastjson.JSONObject;
import com.shop.shoppingmall.entity.ShUser;
import com.shop.shoppingmall.util.api.vo.Result;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * 用户表(ShUser)表服务接口
 *
 * @author makejava
 * @since 2020-09-05 15:25:57
 */
public interface ShUserService {

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    ShUser queryById(String id);

    /**
     * 查询多条数据
     *
     * @param offset 查询起始位置
     * @param limit  查询条数
     * @return 对象列表
     */
    List<ShUser> queryAllByLimit(int offset, int limit);

    /**
     * 新增数据
     *
     * @param shUser 实例对象
     * @return 实例对象
     */
    ShUser insert(ShUser shUser);

    /**
     * 修改数据
     *
     * @param shUser 实例对象
     * @return 实例对象
     */
    ShUser update(ShUser shUser);

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    boolean deleteById(String id);

    Result regist(JSONObject jsonObject);

    Result<?> checkUserIsEffective(ShUser sysUser);

    Result userLogin(Map map);

    /**
     * 冻结状态的操作
     * @param
     * @return
     */
    Result updateStatus(String id,String status);

    /**
     * 对该用户进行假删除的操作
     * @param
     * @return
     */
    Result deleteUserDelFlag(String id,String delFlag);

    /**
     * 根据实体条件对所有用户进行查询
     * @param map
     * @return
     */
    Result selectUserAll(Map map);

    /**
     * 获取短信验证码
     * @param loginName
     * @param smsmode
     * @return
     */
    Result smsLogin(String loginName,String smsmode);

    /**
     * 重置密码
     * @param shUser
     * @param password
     * @return
     */
    Result changePassword(ShUser shUser,String smscode,String password);

    /**
     * 修改密码
     * @param username 登录手机号
     * @param oldpassword 旧密码
     * @param newpassword 新密码
     * @param confirmpassword 确认密码
     * @return
     */
    Result resetPassword(String username, String oldpassword, String newpassword, String confirmpassword);

    /**
     * 查询单条用户信息
     * @param request
     * @return
     */
    Result selectShUserByLoginName(HttpServletRequest request);

    /**
     * 用户修改手机号
     * @param request
     * @return
     */
    Result updateUserNameMobile(HttpServletRequest request,String loginName,String captcha);

    Result updateUser(ShUser shUser);

    /**
     * 查询该用户所有信息
     * @param request
     * @return
     */
    Result selectShUserAll(HttpServletRequest request);

    /**
     * 查询用户个人邀请码，及邀请用户的信息
     * @param request
     * @return
     */
    Result selectUserBySuperiorCode(HttpServletRequest request);
}
